﻿//练习2：⼆进制位置0或者置1
//编写代码将13⼆进制序列的第5位修改为1，然后再改回0

/*
* 分析：
	已知13的二进制补码是：
	00000000000000000000000000001101
	我们知道1的二进制补码是：
	00000000000000000000000000000001
	那我们可以让1左移到第五位，然后按位或，因为按位或是，有1则为1，否则为0
	那么此时我们的二进制是：
	00000000000000000000000000011101	---29

	怎么在改回0呢？
	如果除了第五位为0，其他的为1，然后再按位与，这样我们就可以得到原来的数了，
	那么如何得到除了第五位是0，其他为1呢？
	我们可以对前面向左移动到第五位的1进行取反即可
*/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	
	int change_number = 13;
	int move_bit = 0;
	scanf("%d", &move_bit);
	//改变第五位为1
	change_number = change_number | (1 << move_bit - 1);

	printf("%d\n", change_number);

	//改变第五位为0
	change_number = change_number & ~(1 << move_bit - 1);
	printf("%d\n", change_number);

	return 0;
}